Add database upgrade and rollback compatibility tests#2084
Open
iplay88keys wants to merge 7 commits into
Open
Conversation
Signed-off-by: Jeremy Alvis <jeremy.alvis@solo.io>
Signed-off-by: Jeremy Alvis <jeremy.alvis@solo.io>
Signed-off-by: Jeremy Alvis <jeremy.alvis@solo.io>
Signed-off-by: Jeremy Alvis <jeremy.alvis@solo.io>
Signed-off-by: Jeremy Alvis <jeremy.alvis@solo.io>
Signed-off-by: Jeremy Alvis <jeremy.alvis@solo.io>
Signed-off-by: Jeremy Alvis <jeremy.alvis@solo.io>
Contributor
There was a problem hiding this comment.
Pull request overview
Adds end-to-end upgrade/rollback coverage for the database migration system by exercising real Helm upgrades from prior releases (including a rolling-upgrade compatibility window) and validating schema/data invariants across forward and reverse migrations.
Changes:
- Add Go e2e tests to validate upgrade round-trip (seed → upgrade → schema equivalence → rollback) and rolling upgrade compatibility (old pods against new schema).
- Add scripts/Makefile targets and CI jobs to resolve upgrade-from versions and run the new tests in a version matrix.
- Update database-migrations reference docs to reflect that the round-trip upgrade testing is now enforced.
Reviewed changes
Copilot reviewed 9 out of 9 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| scripts/upgrade-from-version.sh | Resolves the adjacent prior release tag reachable from HEAD for upgrade testing. |
| scripts/prev-stable-version.sh | Resolves the latest patch tag from the previous stable release line for rollback-floor coverage. |
| Makefile | Adds targets to install the prior release and run upgrade/rolling-upgrade e2e suites. |
| go/core/test/e2e/upgrade/upgrade_test.go | Implements the upgrade round-trip test (seed, upgrade, schema equivalence, rollback assertions). |
| go/core/test/e2e/upgrade/roundtrip_test.go | Adds shared helpers for schema dumping, clean-install schema construction, port-forward, and migration driving. |
| go/core/test/e2e/upgrade/rolling_upgrade_test.go | Implements rolling-upgrade compatibility checks (old-code/new-schema window). |
| .github/workflows/ci.yaml | Adds CI jobs to run upgrade tests across adjacent + previous-stable version targets. |
| .github/actions/upgrade-test-setup/action.yaml | Composite action to resolve target versions, dedupe legs, and set up the toolchain/cluster. |
| .claude/skills/kagent-dev/references/database-migrations.md | Updates migration policy docs to reflect enforced upgrade/rollback testing. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Closes: #1637
Adds automated coverage that a Helm upgrade from a prior release to the current build is safe: migrations apply cleanly, existing data survives, the resulting schema matches a fresh install, and the migrations reverse cleanly. Also covers the rolling-deploy window where prior-release pods serve against an already-migrated schema.
Tests
TestUpgrade, gated byRUN_UPGRADE_TESTS): installs the prior release, seeds representative data, upgrades to the current build, then asserts the controller rolls out without crashing, migrations reach the target version cleanly, the seeded data survives, the upgraded schema is identical to a clean install, and reversing the migrations restores the prior schema with data intact.TestRollingUpgradeCompatibility, gated byRUN_ROLLING_UPGRADE_TESTS): runs the upgrade with two controller replicas and verifies a prior-release pod can still read and write while the new schema is live. Skips when there is no migration delta to exercise.Targets
Both tests run against two prior versions (a CI matrix, deduplicated when they coincide):
release/vX.Y.xtip) — the supported rollback floor.Override locally with
UPGRADE_FROM_VERSION.Running locally
Requires a kind cluster, then:
or
A run leaves the database migrated, so recreate the cluster between runs.
Notes